+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
+Tue Feb 19 17:36:31 2002 Kristian Rietveld <kris@gtk.org>
+
+ * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+ gtk_tree_view_column_cell_render,
+ gtk_tree_view_column_cell_focus,
+ gtk_tree_view_column_cell_draw_focus and
+ gtk_tree_view_column_cell_set_dirty to be private functions.
+
+ * gtktreeviewcolumn.[ch]: add install_handler argument to
+ _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+ install_presize_handler) gets called, set widths correctly so
+ autosizing works (#71870)
+
+ * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+ (gtk_tree_view_button_press): make double click on column
+ separator resize the row (#71870)
+ (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+ (#71869, suggestion by Anders Carlsson)
+
Mon Feb 18 23:16:16 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
void _gtk_tree_selection_set_tree_view (GtkTreeSelection *selection,
GtkTreeView *tree_view);
-
+void _gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
+ GdkWindow *window,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ guint flags);
+gboolean _gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
+ gint direction);
+void _gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
+ GdkWindow *window,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ guint flags);
+void _gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
+ gboolean install_handler);
#ifdef __cplusplus
static void gtk_tree_view_real_set_cursor (GtkTreeView *tree_view,
GtkTreePath *path,
gboolean clear_and_select);
+static void gtk_tree_view_column_autosize (GtkTreeView *tree_view,
+ GtkTreeViewColumn *tree_column);
/* interactive search */
static void gtk_tree_view_search_dialog_destroy (GtkWidget *search_dialog,
{
gpointer drag_data;
+ if (event->type == GDK_2BUTTON_PRESS)
+ {
+ gtk_tree_view_column_autosize (tree_view, column);
+ break;
+ }
+
if (gdk_pointer_grab (column->window, FALSE,
GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON1_MOTION_MASK |
* level of the tree we're dropping at.
*/
highlight_x = cell_area.x;
- gtk_tree_view_column_cell_render (column,
- event->window,
- &background_area,
- &cell_area,
- &event->area,
- flags);
+ _gtk_tree_view_column_cell_render (column,
+ event->window,
+ &background_area,
+ &cell_area,
+ &event->area,
+ flags);
if ((node->flags & GTK_RBNODE_IS_PARENT) == GTK_RBNODE_IS_PARENT)
{
gint x, y;
}
else
{
- gtk_tree_view_column_cell_render (column,
- event->window,
- &background_area,
- &cell_area,
- &event->area,
- flags);
+ _gtk_tree_view_column_cell_render (column,
+ event->window,
+ &background_area,
+ &cell_area,
+ &event->area,
+ flags);
}
if (node == cursor &&
((column == tree_view->priv->focus_column &&
GTK_WIDGET_HAS_FOCUS (widget)) ||
(column == tree_view->priv->edited_column)))
{
- gtk_tree_view_column_cell_draw_focus (column,
- event->window,
- &background_area,
- &cell_area,
- &event->area,
- flags);
+ _gtk_tree_view_column_cell_draw_focus (column,
+ event->window,
+ &background_area,
+ &cell_area,
+ &event->area,
+ flags);
}
cell_offset += column->width;
}
for (list = tree_view->priv->columns; list; list = list->next)
{
column = list->data;
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
}
_gtk_rbtree_mark_invalid (tree_view->priv->tree);
if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
{
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
}
}
if (GTK_TREE_VIEW_COLUMN (list->data)->visible)
{
GTK_TREE_VIEW_COLUMN (list->data)->dirty = TRUE;
- gtk_tree_view_column_cell_set_dirty (GTK_TREE_VIEW_COLUMN (list->data));
+ _gtk_tree_view_column_cell_set_dirty (GTK_TREE_VIEW_COLUMN (list->data), TRUE);
break;
}
}
for (list = tree_view->priv->columns; list; list = list->next)
if (((GtkTreeViewColumn *)list->data)->visible &&
((GtkTreeViewColumn *)list->data)->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
- gtk_tree_view_column_cell_set_dirty ((GtkTreeViewColumn *)list->data);
+ _gtk_tree_view_column_cell_set_dirty ((GtkTreeViewColumn *)list->data, TRUE);
/* Ensure we don't have a dangling pointer to a dead node */
ensure_unprelighted (tree_view);
{
if (depth * tree_view->priv->expander_size + horizontal_separator + width > column->requested_width)
{
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
retval = TRUE;
}
}
{
if (horizontal_separator + width > column->requested_width)
{
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
retval = TRUE;
}
}
&iter,
GTK_RBNODE_FLAG_SET (cursor_node, GTK_RBNODE_IS_PARENT),
cursor_node->children?TRUE:FALSE);
- if (gtk_tree_view_column_cell_focus (column, count))
+ if (_gtk_tree_view_column_cell_focus (column, count))
{
tree_view->priv->focus_column = column;
found_column = TRUE;
g_object_notify (G_OBJECT (tree_view), "headers_visible");
}
+static void
+gtk_tree_view_column_autosize (GtkTreeView *tree_view,
+ GtkTreeViewColumn *column)
+{
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column));
+
+ if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
+ return;
+
+ _gtk_tree_view_column_cell_set_dirty (column, FALSE);
+
+ presize_handler_callback (tree_view);
+ while (validate_rows_handler (tree_view));
+
+ gtk_widget_queue_resize (GTK_WIDGET (tree_view));
+}
/**
* gtk_tree_view_columns_autosize:
* @tree_view: A #GtkTreeView.
*
- * Resizes all columns to their optimal width.
+ * Resizes all columns to their optimal width. Only works after the
+ * treeview has been realized.
**/
void
gtk_tree_view_columns_autosize (GtkTreeView *tree_view)
column = list->data;
if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
continue;
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
dirty = TRUE;
}
tmp_column = GTK_TREE_VIEW_COLUMN (list->data);
if (tmp_column->visible)
- gtk_tree_view_column_cell_set_dirty (tmp_column);
+ _gtk_tree_view_column_cell_set_dirty (tmp_column, TRUE);
}
if (tree_view->priv->n_columns == 0 &&
{
column = GTK_TREE_VIEW_COLUMN (list->data);
if (column->visible)
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
}
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
}
if (column->visible == FALSE)
continue;
if (gtk_tree_view_column_get_sizing (column) == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
- gtk_tree_view_column_cell_set_dirty (column);
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
}
if (tree_view->priv->destroy_count_func)
{
gint cell_y;
gdouble offset_into_row;
- gdouble quarter;
+ gdouble third;
GdkRectangle cell;
GtkTreeViewColumn *column = NULL;
GtkTreePath *tmp_path = NULL;
if (tree_view->priv->tree == NULL)
return FALSE;
- /* If in the top quarter of a row, we drop before that row; if
- * in the bottom quarter, drop after that row; if in the middle,
+ /* If in the top third of a row, we drop before that row; if
+ * in the bottom third, drop after that row; if in the middle,
* and the row has children, drop into the row.
*/
tmp_path = NULL;
- quarter = cell.height / 4.0;
+ third = cell.height / 3.0;
if (pos)
{
- if (offset_into_row < quarter)
+ if (offset_into_row < third)
{
*pos = GTK_TREE_VIEW_DROP_BEFORE;
}
- else if (offset_into_row < quarter * 2)
+ else if (offset_into_row < (cell.height / 2.0))
{
*pos = GTK_TREE_VIEW_DROP_INTO_OR_BEFORE;
}
- else if (offset_into_row < quarter * 3)
+ else if (offset_into_row < third * 2)
{
*pos = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
}
}
if (gtk_tree_view_column_cell_is_visible (column))
- gtk_tree_view_column_cell_render (column,
- drawable,
- &background_area,
- &cell_area,
- &expose_area,
- 0);
+ _gtk_tree_view_column_cell_render (column,
+ drawable,
+ &background_area,
+ &cell_area,
+ &expose_area,
+ 0);
cell_offset += column->width;
}
info->attributes = g_slist_prepend (info->attributes, g_strdup (attribute));
if (tree_column->tree_view)
- gtk_tree_view_column_cell_set_dirty (tree_column);
+ _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
}
info->destroy = destroy;
if (tree_column->tree_view)
- gtk_tree_view_column_cell_set_dirty (tree_column);
+ _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
}
info->attributes = NULL;
if (tree_column->tree_view)
- gtk_tree_view_column_cell_set_dirty (tree_column);
+ _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
}
tree_column->spacing = spacing;
if (tree_column->tree_view)
- gtk_tree_view_column_cell_set_dirty (tree_column);
+ _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
}
/**
* #GtkTreeView.
**/
void
-gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- guint flags)
+_gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
+ GdkWindow *window,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ guint flags)
{
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
g_return_if_fail (background_area != NULL);
gboolean
-gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
- gint direction)
+_gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
+ gint direction)
{
if (GTK_TREE_VIEW (tree_column->tree_view)->priv->focus_column == tree_column)
return FALSE;
}
void
-gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- guint flags)
+_gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
+ GdkWindow *window,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ guint flags)
{
gint focus_line_width;
GtkStateType cell_state;
}
void
-gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column)
+_gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
+ gboolean install_handler)
{
GList *list;
info->requested_width = 0;
}
tree_column->dirty = TRUE;
- tree_column->requested_width = 0;
+ tree_column->resized_width = MAX (tree_column->requested_width, tree_column->button_request);
+ tree_column->requested_width = -1;
+ tree_column->width = 0;
if (tree_column->tree_view &&
GTK_WIDGET_REALIZED (tree_column->tree_view))
{
- _gtk_tree_view_install_mark_rows_col_dirty (GTK_TREE_VIEW (tree_column->tree_view));
+ if (install_handler)
+ _gtk_tree_view_install_mark_rows_col_dirty (GTK_TREE_VIEW (tree_column->tree_view));
+ else
+ GTK_TREE_VIEW (tree_column->tree_view)->priv->mark_rows_col_dirty = TRUE;
gtk_widget_queue_resize (tree_column->tree_view);
}
}
gint *y_offset,
gint *width,
gint *height);
-void gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- guint flags);
-gboolean gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
- gint direction);
-void gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- guint flags);
gboolean gtk_tree_view_column_cell_is_visible (GtkTreeViewColumn *tree_column);
-void gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column);
-
#ifdef __cplusplus
}